package taller.dataLayer.entities;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;

import taller.dataLayer.vo.CotizacionVO;
import taller.dataLayer.vo.ItemCotizacionVO;

@Entity
public class Cotizacion implements Serializable {
	@Id
	private Integer numero;
	private Date fechaVigenciaDesde;
	private Date fechaVigenciaHasta;
	private Integer numeroOficinaDeVenta;
	@OneToMany(mappedBy="cotizacion", cascade=CascadeType.ALL)
	private List<ItemCotizacion> items;
	private static final long serialVersionUID = 1L;

	public Cotizacion() {
		items = new ArrayList<ItemCotizacion>();
	}
	
	public CotizacionVO getVO(){
		List<ItemCotizacionVO> itemsVO = new ArrayList<ItemCotizacionVO>();
		for (ItemCotizacion itemCotizacion : items) {
			ItemCotizacionVO itemVO = itemCotizacion.getVO();
			itemsVO.add(itemVO);
		}
		
		CotizacionVO cotizacionVO = new CotizacionVO(this.numero, this.fechaVigenciaDesde, 
				this.fechaVigenciaHasta, this.numeroOficinaDeVenta, itemsVO);
		
		return cotizacionVO;
	}
	
	public void setVO(CotizacionVO cotizacionVO){
		List<ItemCotizacion> items = new ArrayList<ItemCotizacion>();
		
		List<ItemCotizacionVO> itemsVO = cotizacionVO.getItems();
		if (itemsVO != null) {
			for (ItemCotizacionVO itemCotizacionVO : itemsVO) {
				ItemCotizacion item = new ItemCotizacion();
				item.setVO(itemCotizacionVO);
				item.setCotizacion(this);
				items.add(item);
			}
		}
		
		this.items = items;
		this.fechaVigenciaDesde = cotizacionVO.getFechaVigenciaDesde();
		this.fechaVigenciaHasta = cotizacionVO.getFechaVigenciaHasta();
		this.numero = cotizacionVO.getNumero();
		this.numeroOficinaDeVenta = cotizacionVO.getNumeroOficinaDeVenta();
	}
	
	public Integer getNumero() {
		return this.numero;
	}

	public void setNumero(Integer numero) {
		this.numero = numero;
	}   
	
	public Date getFechaVigenciaDesde() {
		return this.fechaVigenciaDesde;
	}

	public void setFechaVigenciaDesde(Date fechaVigenciaDesde) {
		this.fechaVigenciaDesde = fechaVigenciaDesde;
	}   
	
	public Date getFechaVigenciaHasta() {
		return this.fechaVigenciaHasta;
	}

	public void setFechaVigenciaHasta(Date fechaVigenciaHasta) {
		this.fechaVigenciaHasta = fechaVigenciaHasta;
	}   
	
	public List<ItemCotizacion> getItems() {
		return items;
	}
	
	public void setItems(List<ItemCotizacion> items) {
		this.items = items;
	}

	public Integer getNumeroOficinaDeVenta() {
		return numeroOficinaDeVenta;
	}

	public void setNumeroOficinaDeVenta(Integer numeroOficinaDeVenta) {
		this.numeroOficinaDeVenta = numeroOficinaDeVenta;
	}
}
